今天要介紹的是Swift中的Closure。我們可以把Closure想成無名的function。一般來說會有兩種使用方式,一是將Closure存在變數內,另外一種是當作function內的(傳入)參數使用。
現在,我們馬上開始!
如何建立playground,請參考Day4的文章
https://ithelp.ithome.com.tw/articles/10217428
function介紹,請參考Day8的文章
https://ithelp.ithome.com.tw/articles/10219686
一樣先來看看程式碼
// 定義一個的方法
func sayHi() {
print("Hi")
}
sayHi()
// closure的寫法
let sayHi2 = {
() -> () in
print("Hi")
}
sayHi
let sayHi3 = { print("Hi") }
// 定義一個帶參數有回傳值的方法
func sayHello(name: String) -> String {
return "Hello, \(name)."
}
sayHello(name: "mike")
// closure 的寫法
let sayHello2 = {
(name: String) -> String in
return "Hello, \(name)."
}
sayHello2("mike")
var names = ["mike", "bonnie", "peter"]
//names.sort(by: {
// (name1: String, name2: String) -> Bool in
// return name1.count > name2.count
//})
// 更簡潔的寫法
names.sort { (name1, name2) -> Bool in
return name1.count > name2.count
}
names // ["bonnie", "peter", "mike"]
同樣的這個例子也可以縮寫,以下用反排序做示範
names.sort { $0.count < $1.count }
names // ["mike", "peter", "bonnie"]
在今天的文章裡,我們做了Closure的基本介紹,以及更為精簡的寫法,在App的實作中,常會遇到內建的方法中,所帶入的參數為Closure,因此,Closure的觀念也是十分重要的。
今天的內容就到這邊,感謝讀者們的閱讀。
https://github.com/chiron-wang/IT30_11
彼得潘的 Swift iOS App 開發問題解答集
https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E5%95%8F%E9%A1%8C%E8%A7%A3%E7%AD%94%E9%9B%86
iOS 13 & Swift 5 - The Complete iOS App Development Bootcamp - Angela Yu
https://www.udemy.com/course/ios-13-app-development-bootcamp/
深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
https://www.udemy.com/course/iphone-swift4/
心智圖軟體Xmind
https://www.xmind.net/
彼得潘的Swift程式設計入門
https://www.tenlong.com.tw/products/9789572246573
《The Swift Programming Language》正體中文版
https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/01_The_Basics.html#floating-point_numbers
Apple Developer Document
https://developer.apple.com/documentation/swift/double
[Closure相關參考]
swift doc Closures
https://docs.swift.org/swift-book/LanguageGuide/Closures.html
【Swift3 - Closure(閉包)】
https://medium.com/@mikru168/ios-closure-%E9%96%89%E5%8C%85-cf8ab16d6efc
Swift 學習筆記
https://hugolu.gitbooks.io/learn-swift/content/Basic/Closure.html